package com.shiro.permission;

import com.shiro.util.ShiroUtil;
import org.apache.shiro.subject.Subject;

/**
 * 1.Authentication（认证）：用户身份识别。
 * 2.Authorization（授权）：访问控制。
 *
 * @author 高旭
 * @date 2020-12-22
 */
public class App {

    public static void main(String[] args) {
        /**
         * 公共
         */
        Subject currentUser = ShiroUtil.login("classpath:permission_shiro.ini", "java1234", "1234");

        /**
         * 验证权限，返回boolean
         * boolean      isPermitted（String）：        验证某个权限
         * boolean[]    isPermitted（String... | list<string>）:      验证某些权限
         * boolean      isPermittedAll(list<string>):       验证某些权限
         */
//        boolean result = currentUser.isPermitted("user:select");
//        System.out.println(result);
//        boolean[] results = currentUser.isPermitted("user:select", "user:add");
//        for (boolean b : results) {
//            System.out.println(b);
//        }
//        result = currentUser.isPermittedAll("user:select", "user:delete");
//        System.out.println(result);
        /**
         * 检查权限，没有返回，不通过则抛出异常
         * checkPermission(string)：检查是否有这个权限，没有则直接跑出异常   void
         * checkPermissions(string... | list<string>)：如果不能同时全部有这些权限，则直接跑出异常   void
         */
//        currentUser.checkPermission("user:select");
//        currentUser.checkPermissions("user:select", "user:update", "user:delete");
        /**
         * 验证有角色，返回boolean
         *  boolean      hasRole(string)：是否有这个角色
         *  boolean[]    hasRoles(list<string>):是否有这些角色
         *  boolean     hasAllRoles(list<string>):是否都有这些角色
         */
//        boolean result = currentUser.hasRole("role1");
//        System.out.println(result);
//        boolean[] results = currentUser.hasRoles(Arrays.asList("role1", "role2"));
//        for (boolean b : results) {
//            System.out.println(b);
//        }
//        result = currentUser.hasAllRoles(Arrays.asList("role1", "role2"));
//        System.out.println(result);


        /**
         * 检查角色，没有返回，不通过则抛出异常
         * checkRole(string)：检查是否有这个角色，没有则直接跑出异常   void
         * checkRoles(string... |list<string>)：如果不能同时全部有这些角色，则直接跑出异常   void
         */
//        currentUser.checkRole("role1");
//        currentUser.checkRoles(Arrays.asList("role1", "role2"));
//        currentUser.checkRoles("role1", "role2", "role3");


        currentUser.logout();
    }

}
